#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @File   : tsSocketServerServ.py
# @Email  : xuexia_xu@feidee.com
# @Time   : 2024/4/7 13:56
# @Desc   : 《Python核心编程第3版》2.5.1 SocketServer 时间戳 TCP 服务器

from socket import *

HOST = 'localhost'
PORT = 21567
BUFSIZ = 1024
ADDR = (HOST, PORT)

# SocketServer 请求处理程序的默认行为是接受连接、获取请求，然后关闭连接。由于这个原因，我们不能在应用程序整个执行过程中都保持连接，因此每次向服务器发送消息时，都需要创建一个新的套接字。
while True:
    tcpCliSock = socket(AF_INET, SOCK_STREAM)
    tcpCliSock.connect(ADDR)
    data = input('>')
    if not data:
        break
    # 因为这里使用的处理程序类对待套接字通信就像文件一样，所以必须发送行终止符（回车和换行符）。
    # 而服务器只是保留并重用这里发送的终止符。当得到从服务器返回的消息时，用 strip()函数对其进行处理并使用由 print声明自动提供的换行符。
    tcpCliSock.send(b'%s\r\n' % data.encode())
    data = tcpCliSock.recv(BUFSIZ)
    if not data:
        break
    print(data.strip())
    tcpCliSock.close()
